// 封装 request

// 请求基本路径
const baseURL = 'https://api-hmugo-web.itheima.net/api/public/v1'

// 准备计数器变量，用于记录请求个数，🧨 注意这里是变量
let requestCount = 0

// 解构出 url，...config 接收所有剩余参数
const request = (config) => {
  // 返回 Promise 对象
  return new Promise((resolve, reject) => {
    // 请求前用户提示 - 导航栏的 loading
    uni.showNavigationBarLoading()
    // 计数器累加
    requestCount++
    // 发起请求前，自动添加请求头，自动带上 token（相当于以前的请求拦截器）
    if (config.url.startsWith('/my/')) {
      config.header = {
        ...config.header, // 稳妥起见，先展开原本的 header，再额外添加 Authorization
        Authorization: uni.getStorageSync('token'),
      }
    }
    // 发送网络请求
    uni.request({
      // 展开运算符把所有请求参数展开作为 request 的参数
      ...config,
      // 完整的请求地址拼接：基本路径 + 接口API
      url: baseURL + config.url,
      // 成功
      success: (res) => {
        // 调用成功的回调函数
        resolve(res)
      },
      // 失败
      fail: (err) => {
        // 调用失败的回调函数
        reject(err)
      },
      // 完成：不管成功或失败
      complete: () => {
        // 计数器减少
        requestCount--
        // 计数器为 0 的时候，关闭加载提示
        if (requestCount === 0) {
          uni.hideNavigationBarLoading()
        }
      },
    })
  })
}

export default request
